package com.nur.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.nur.dal.Conexion;
import com.nur.dto.Nota;

public class NotaDao extends Dao<Nota>{

	public NotaDao(Context context){
		super(context);
	}

	@Override
	public void insertar() throws Exception{
		Conexion conexion = Conexion.getInstance();
		SQLiteDatabase db = conexion.getWritableDatabase();
		
		if(dto == null)
			throw new Exception("El objeto a insertar no puede ser nulo");
		
		ContentValues params = new ContentValues();
	//	params.put("idusuario", this.dto.getIdUsuario());
		params.put("comentario", this.dto.getComentario());
		params.put("hora_inicio", this.dto.getHoraInicio());
		params.put("hora_fin", this.dto.getHoraFin());
		params.put("tipo", this.dto.getTipo());
		params.put("nuevo", this.dto.isNuevo());
		
		long id = db.insert("nota", null, params);
		this.dto.setIdNota((int)id);
	}

	@Override
	public void update() throws Exception{
		Conexion conexion = Conexion.getInstance();
		SQLiteDatabase db = conexion.getWritableDatabase();
		
		if(dto == null)
			throw new Exception("El objeto a actualizar no puede ser nulo");
		
		ContentValues params = new ContentValues();
	//	params.put("idusuario", super.dto.getIdUsuario());
		params.put("comentario", super.dto.getComentario());
		params.put("hora_inicio", super.dto.getHoraInicio());
		params.put("hora_fin", super.dto.getHoraFin());
		params.put("tipo", super.dto.getTipo());
		params.put("nuevo", super.dto.isNuevo());

		db.update("nota", params,"idNota=?", new String[]{ String.valueOf(this.dto.getIdNota()) });
	}

	@Override
	public void delete() throws Exception{
		Conexion conexion = Conexion.getInstance();
		SQLiteDatabase db = conexion.getWritableDatabase();
		
		if(dto == null)
			throw new Exception("El objeto a eliminar no puede ser nulo");
		
		db.delete("nota", "idNota=?", new String[]{ String.valueOf(super.dto.getIdNota()) });
	}

	@Override
	public Nota select(int id) {
		Conexion conexion = Conexion.getInstance();
		SQLiteDatabase db = conexion.getReadableDatabase();
		
		Cursor cursor = db.rawQuery("SELECT idnota, "
	//				+ "idusuario, "
					+ "comentario, "
					+ "hora_inicio, "
					+ "hora_fin, "
					+ "fecha, "
					+ "tipo, "
					+ "nuevo FROM nota WHERE idnota = ?", 
				new String[]{ String.valueOf(id) });
		
		if(!cursor.moveToFirst())
			return null;
		
		int idNota = cursor.getInt(0);
		//int idUsario = cursor.getInt(1);
		String comentario = cursor.getString(1);
		String horaInicio = cursor.getString(2);
		String horaFin = cursor.getString(3);
		String fecha = cursor.getString(4);
		String tipo = cursor.getString(5);
		boolean esNuevo = cursor.getInt(6) == 1;
		
		Nota objNota = new Nota(idNota, /*idUsario, */comentario, horaInicio, horaFin, fecha, tipo, esNuevo);
		
		return objNota;
	}

	public ArrayList<Nota> selectAll() {
		Conexion conexion = Conexion.getInstance();
		SQLiteDatabase db = conexion.getReadableDatabase();
		
		Cursor cursor = db.rawQuery("SELECT idnota, "
	//				+ "idusuario, "
					+ "comentario, "
					+ "hora_inicio, "
					+ "hora_fin, "
					+ "fecha, "
					+ "tipo, "
					+ "nuevo FROM nota; ", new String[]{});
		
		ArrayList<Nota> listaNotas = new ArrayList<Nota>();
		
		while(cursor.moveToNext()){
			int idNota = cursor.getInt(0);
	//		int idUsario = cursor.getInt(1);
			String comentario = cursor.getString(1);
			String horaInicio = cursor.getString(2);
			String horaFin = cursor.getString(3);
			String fecha = cursor.getString(4);
			String tipo = cursor.getString(5);
			boolean esNuevo = cursor.getInt(6) == 1;
			
			Nota objNota = new Nota(idNota,/* idUsario,*/ comentario, horaInicio, horaFin, fecha, tipo, esNuevo);
			listaNotas.add(objNota);
		}
		return listaNotas;
	}
	
}
